//加载第三方模块
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

//加载路由文件
var routes = require('./routes/index');
var settings = require('./setting');
//随后我们将关于数据库操作的一系列第三方模块引进来
var flash = require('connect-flash');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);


//实例化一个应用
var app = express();

// view engine setup
//设置视图的路径，path指的是网站的根目录，__dirname指的是当前的文件夹网站的根目录/views
app.set('views', path.join(__dirname, 'views'));
//视图所使用的模板引擎，这里是ejs
app.set('view engine', 'ejs');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));


//使用flash
app.use(flash());
app.use(session({
  secret:settings.cookieSecret,
  key:settings.db,
  cookie:{maxAge:1000*60*60*24*30},
  store:new MongoStore({
    url:'mongodb://localhost/myblog'
  }),
  resave:false,
  saveUninitialized:true
}));
//使用logger的调试工具
app.use(logger('dev'));
//如果是数据的话，这里，全部用json来进行处理
app.use(bodyParser.json());
//POST请求，bodyparser处理.express不支持post请求，只支持get请求
app.use(bodyParser.urlencoded({ extended: false }));
//使用cookie
app.use(cookieParser());
//设置静态资源的目录
app.use(express.static(path.join(__dirname, 'public')));
//在routes里面设置app的路由
routes(app);

/*
app.listen(3000,function(){
  console.log('node is ok');
});
*/
app.set('port', process.env.PORT || 3000);
app.listen(app.get('port'),function(){
    console.log('node is running '+ app.get('port'));
});
//把app封装了一个模块
module.exports = app;



/*
 删掉它
 //这里使用路由来处理不同的请求
 app.use('/', routes);
 app.use('/users', users);
 */

/*

 // catch 404 and forward to error handler
 app.use(function(req, res, next) {
 var err = new Error('Not Found');
 err.status = 404;
 next(err);
 /!*res.render('404',{
 status:404,
 message:'Not Found'
 })*!/
 });

 // error handlers

 // development error handler
 // will print stacktrace
 if (app.get('env') === 'development') {
 app.use(function(err, req, res, next) {
 res.status(err.status || 500);
 res.render('error', {
 message: err.message,
 error: err
 });
 });
 }

 // production error handler
 // no stacktraces leaked to user
 //使用500页面来提示用户信息，它的模板是error.ejs
 app.use(function(err, req, res, next) {
 res.status(err.status || 500);
 res.render('error', {
 message: err.message,
 error: {}
 });
 });
 */

